package com.thesis.manage.common.mongodb;

import com.thesis.manage.common.entity.AbstractMongoEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;

/**
 * @author php
 * @date 2017/11/27
 * mongodb公共服务接口
 */
public interface MongoService<T extends AbstractMongoEntity> {

    /**
     * 查询所有
     *
     * @return list
     */
    List<T> findAll();

    /**
     * id查询
     *
     * @param id id
     * @return T
     */
    T findById(Long id);

    /**
     * 数据修改
     *
     * @param t 实体
     * @return id
     */
    Long update(T t);

    /**
     * 增加
     *
     * @param t 实体
     */
    void insert(T t);

    /**
     * 添加集合
     *
     * @param list list
     */
    void insertAll(List<T> list);

    /**
     * 通过id删除数据（真实删除）
     *
     * @param id id
     */
    void remove(Long id);

    /**
     * 分页查询
     *
     * @param t        搜索条件
     * @param pageable 分页参数
     * @param sort     排序
     * @return page
     */
    Page<T> findByPage(T t, Pageable pageable, Sort sort);

    Long queryCount(T t);

    /**
     * 根据条件查询一条数据
     *
     * @param t 实体
     * @return T
     */
    T findByOne(T t);

    /**
     * 逻辑删除
     *
     * @param id id
     */
    void deleteById(Long id);

    /**
     * 查询所有（通过参数）
     *
     * @param t 参数实体
     * @return list
     */
    List<T> find(T t);
}
